package com.ffggffgfv.backend.mapper;

import com.ffggffgfv.backend.dto.ShelfQueryDTO;
import com.ffggffgfv.backend.entity.Shelf;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 货架数据访问层
 */
@Mapper
public interface ShelfMapper {

    /**
     * 查询所有货架
     *
     * @return 货架列表
     */
    List<Shelf> selectAll();

    /**
     * 分页条件查询货架
     *
     * @param queryDTO 查询条件
     * @param offset   起始位置
     * @param limit    查询数量
     * @return 货架列表
     */
    List<Shelf> selectByCondition(@Param("query") ShelfQueryDTO queryDTO,
                                  @Param("offset") int offset,
                                  @Param("limit") int limit);

    /**
     * 查询符合条件的货架总数
     *
     * @param queryDTO 查询条件
     * @return 货架总数
     */
    long countByCondition(@Param("query") ShelfQueryDTO queryDTO);

    /**
     * 根据ID查询货架
     *
     * @param id 货架ID
     * @return 货架对象
     */
    Shelf selectById(Long id);

    /**
     * 根据商家ID查询货架列表
     *
     * @param merchantId 商家ID
     * @return 货架列表
     */
    List<Shelf> selectByMerchantId(Long merchantId);

    /**
     * 插入货架
     *
     * @param shelf 货架对象
     * @return 影响行数
     */
    int insert(Shelf shelf);

    /**
     * 更新货架
     *
     * @param shelf 货架对象
     * @return 影响行数
     */
    int update(Shelf shelf);

    /**
     * 删除货架
     *
     * @param id 货架ID
     * @return 影响行数
     */
    int deleteById(Long id);

    /**
     * 更新货架状态
     *
     * @param id         货架ID
     * @param status     状态
     * @param updateTime 更新时间
     * @return 影响行数
     */
    int updateStatus(@Param("id") Long id,
                     @Param("status") Integer status,
                     @Param("updateTime") Date updateTime);

    /**
     * 统计商家的货架数量
     *
     * @param merchantId 商家ID
     * @return 货架数量
     */
    int countByMerchantId(Long merchantId);
}
